package com.cskaoyan.connectionpool;

import com.cskaoyan.utils.JDBCUtils;

import java.sql.Connection;
import java.util.LinkedList;

/**
 * 创建日期: 2021/11/24 11:36
 *
 * @author ciggar
 * 自己实现的数据库连接池
 * 要实现两个功能
 *  1. 获取连接
 *  2. 返回连接
 *
 *  去掉一些写死的魔法值
 */
public class MyConnectionPool3 {

    // 初始化大小
    static int INIT_SIZE = 10;
    static int MIN_SIZE = 5;
    static int INCREMENT_SIZE = 5;


    // 从头部存，从尾部取
    static LinkedList<Connection> connectionList;

    static {

        connectionList = new LinkedList<>();
        // 初始化
        addCapcity(INIT_SIZE);
    }



    // 获取连接
    public static Connection getConnection(){

        // 判断一下如果连接池里面的数量太少了，就自动扩容
        if (connectionList.size() < MIN_SIZE) addCapcity(INCREMENT_SIZE);

        Connection connection = connectionList.removeLast();
        return connection;

    }


    // 返回连接
    public static void returnConnection(Connection connection){

        connectionList.addFirst(connection);

    }


    // 扩容的方法
    public static void addCapcity(int size){
        if (size <= 0) return;
        for (int i = 0; i < size; i++) {
            // 1. 获取连接
            Connection connection = JDBCUtils.getConnection();

            // 2. 把获取到的连接放到connectionList中
            connectionList.addFirst(connection);
        }
    }

}
